/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package Logica;

import Utilidades.Observable;
import java.util.ArrayList;
import java.util.Date;

/**
 *
 * @author Javier Arzarello
 */
public class Fachada extends Observable{
    
    private ssActor ssActor = new ssActor();
    private ssHipodromo ssHipodromo = new ssHipodromo();
    
    public enum Evento {
        CA_DEFINIDA,CA_ABIERTA,CA_CERRADA,CA_FINALIZADA, CABALLO_CARRERA, HIPODROMOS
    }
    
//SINGLETON
    private static Fachada instancia = null;
    
    public static Fachada getInstancia(){
        if(instancia==null){
            instancia = new Fachada();
        }
        return instancia;
    }
    
    //CONSTRUCTOR
    private Fachada(){    
    }
    
    //METODOS DE GET
    public ArrayList<Hipodromo> getHipodromos(){
        return ssHipodromo.getHipodromos();
    }
    
    //METODOS de AGREGAR
    public boolean agregarCaballo(Caballo c){
        return ssHipodromo.agregarCaballo(c);
    }

    public boolean agregarAdministrador(Administrador a) {
        return ssActor.agregarAdministrador(a);
    }

    public boolean  agregarJugador(Jugador jugador) {
        return ssActor.agregarJugador(jugador);
    }
    
    public boolean agregarHipodromo(Hipodromo h){
        return ssHipodromo.agregarHipodromo(h);
    }
    
    //LogIns
    public Administrador buscarAdministrador(String nombreUsuario, String password){
        return ssActor.buscarAdministrador(nombreUsuario, password);
    }
    
    public Jugador buscarJugador(String nombreUsuario, String password){
        return ssActor.buscarJugador(nombreUsuario, password);
    }
    
    //Métodos de cargar
    public Hipodromo cargarHipodromo(String nombre){
        return ssHipodromo.cargarHipodromo(nombre);
    }
    
    public Caballo cargarCaballo(String nombre) {
        return ssHipodromo.cargarCaballo(nombre);
    }

    public ArrayList<Caballo> getCaballos() {
        return ssHipodromo.getCaballos();
    }

    //METODOS DE BUSCAR
    public boolean buscarCaballosenJornadas(Date fecha, Caballo c){
        return ssHipodromo.buscarCaballosenJornadas(fecha, c);
    }
    
    public void agregarParticipante(Carrera c, Participante p){
        ssHipodromo.agregarCaballoCarrera(c, p);
    }
    
    public void abrirCarrera(Carrera c){
        ssHipodromo.abrirCarrera(c);
    }
    
    public void cerrarCarrera(Carrera c){
        ssHipodromo.cerrarCarrera(c);
    }
    
    
}
